package com.ailsa.learningsystem.reflex;

import java.lang.reflect.Constructor;

/**
 * @Author 冉冉
 * @Version 1.0
 * 1.创建字节码对象：Class.forName
 * 2.获取有参的构造方法：字节码对象.getConstructor(参数1，参数2)；
 * 3.使用反射创建对象：构造方法的对象.newInstance(参数1，参数2);
 */

public class ReflexDemo02 {
    public static void main(String[] args)throws Exception {
        //1.普通的方式
        System.out.println("普通方式创建对象");
        Juicer juicer=new Juicer();
        juicer.run(new Apple());
        juicer.run(new Orange());
        System.out.println("反射方式创建");
        //1.创建字节码对象：Class.forName
        Class claszz = Class.forName("com.ailsa.learningsystem.reflex.Apple");
        //获取到对象
        Fruit fruit =(Fruit) claszz.newInstance();
        fruit.seqzz();
        //2.获取有参的构造方法：字节码对象.getConstructor(参数1类型，参数2类型,....)；
        Constructor constructor = claszz.getConstructor(String.class);
        System.out.println(constructor);
        //3.使用反射创建对象：构造方法的对象.newInstance(参数1，参数2);
        Apple apple =(Apple) constructor.newInstance("白色");
        System.out.println(apple);
    }
}
